package com.study.reflect.example.ex03;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;

import org.junit.Test;

/**
* @Name: ReflectTest
* @Description: 反射练习三
* 说明：
* 	写一个方法
* 		public void setProperty(Object obj, String propertyName, Object value) {}
*	方法描述：
*		此方法可将obj对象中名为propertyName的属性的值设置为value。
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-17 下午8:25:21 
* @Version: V1.0
 */
public class ReflectTest {
	
	/**
	* @Name: setProperty
	* @Description: 将obj对象中名为propertyName的属性的值设置为value
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-17 下午8:28:53
	* @Parameters: @param obj
	* @Parameters: @param propertyName
	* @Parameters: @param value
	* @Return: void
	 */
	public void setProperty(Object obj, String propertyName, Object value) throws Exception {
		//获取Object的字节码文件对象
		Class clazz = obj.getClass() ;
		//获取指定的成员属性
		Field field = clazz.getDeclaredField(propertyName) ;
		//取消权限访问限制
		field.setAccessible(true) ;
		//设置成员变量的值
		field.set(obj, value) ;
	}
	
	@Test
	public void test() throws Exception {
		Student student = new Student("张三", 21, true, "北京") ;
		System.out.println(student);
		setProperty(student, "address", "上海") ;
		System.out.println(student);
	}

}




